<?php
class UsuarioDAO extends GenericDAO  {

	function __construct() {
		$this->tabela["alteracao"] = array(	"id" 	=> 54,
											"nome" 	=> strtolower(substr(get_class(), 0, -3)));
	
		$this->tabela["consulta"]  = array(	"id" 	=> 96,
											"nome" 	=> "vw_" . strtolower(substr(get_class(), 0, -3)));
	}
	
	public function consultarPK($valor) {
	    $sql = "where id = :id";
	    $params['id'] = $valor;
	    return $this->consultar($sql, $params);
	}

	public function consultarNome($valor) {
	    $sql = "where usuario like :usuario";
	    $params['usuario'] = $valor;
	    return $this->consultar($sql, $params);
	}
	
	public function inserir($registro, $finalizarTransacao = true) {
		$registro['senha'] = md5($registro['senha']);
		if ($this->inserirRegistro($registro, $finalizarTransacao)) {
			$registro['id'] = $this->ultimoId();
			unset($registro['senha']);
		}
		return $registro;
	}
	
	public function excluir($id, $finalizarTransacao = true) {
		$pk['id'] = $id;
		return $this->excluirRegistro($pk, $finalizarTransacao);	
	}
	
	public function alterar($registro, $finalizarTransacao = true) {
		if (isset($registro['usuario'])) {
			$reg['usuario'] = $registro['usuario'];
		}
		if (isset($registro['senha'])) {
			$reg['senha'] = md5($registro['senha']);
		}
		if (isset($registro['mail'])) {
			$reg['mail'] = $registro['mail'];
		}
		$pk['id'] 		= $registro['id'];
		return $this->alterarRegistro($reg, $pk, $finalizarTransacao);
	}
	
	public function login($usuario, $senha) {
		$sql = 	"select usuario.id, 									" .
				"		usuario.usuario, 								" .
				"		(senha_temp = :token) senha_temp,				" .
				"		date_format(now(), '%d/%m/%Y %H:%i') acesso 	" .
				"  from usuario left join senha_temp s					" .
				"					   on usuario.id = s.usuario		" .
				" where usuario.usuario = :usuario 						" .
				"   and (senha = :senha									" .	
				"		or (senha_temp = :token2 						" .
				"			and data_hora >= now() - interval 1 day))	" ;
		
		$params['usuario'] 	= $usuario;
		$params['token']	= md5($senha); 
		$params['senha']	= md5($senha);
		$params['token2']	= md5($senha);
		
		return $this->execQuery($sql, $params);
	}
	
	public function consultarConfig($usuarioid) {
		$sql = "select parametro, valor from config";
		$params = array();
		return $this->execQuery($sql, $params);
	}
	
	public function alterarConfig($registro, $finalizarTransacao = true) {
		$sql = "update config set valor = :valor where usuario = :usuario and parametro = :parametro";
		return $this->execSQL($sql, $registro, $finalizarTransacao);
	}
	
	public function replicarConfig($usu_or, $usu_de) {
		$sql = "insert into config select $usu_de, parametro, descricao, valor from config where usuario = :usuario";
		$params['usuario'] = $usu_or;
		return $this->execSQL($sql, $params);
	}
	
	public function inserirSenhaTemp($usuario, $senha, $finalizarTransacao = true) {
		$sql = "select id, mail from usuario where usuario = :usuario";
		$params['usuario'] = $usuario;
		$usu = $this->execQuery($sql, $params);
		
		$this->excluirSenhaTemp($usu[0]['id'], false);
		$sql = "insert into senha_temp (usuario, senha_temp) values (:usuario, :senha)";
		$params['usuario'] = $usu[0]['id'];
		$params['senha'] = md5($senha);
		$this->execSQL($sql, $params, $finalizarTransacao);
		return $usu[0];
	}
	
	public function excluirSenhaTemp($usuario, $finalizarTransacao = true) {
		$sql = "delete from senha_temp where usuario = :usuario";
		$params['usuario'] = $usuario;
		return $this->execSQL($sql, $params, $finalizarTransacao);
	}
}
?>